﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using General;

namespace TVL
{
    public class Ventajas
    {
        private string _Nombre;
        private int _Puntos;
        private string _Descripcion;
        private string _fallo;
        private const string _rutaxsd = "../../../TVL/TVLClases/Ventajas.xsd";

        public Ventajas(string N, int P, string D)
        {
            _Descripcion = D;
            _Nombre = N;
            _Puntos = P;
        }

        public Ventajas()
        {
            _Descripcion = "";
            _Nombre = "";
            _Puntos = 0;
        }

        public Ventajas(XmlElement nodo)
        {
            this.cargar(nodo);
        }

        public string Nombre
        {
            get
            {
                return this._Nombre;
            }
            set
            {
                this._Nombre = value;
            }
        }

        public int Puntos
        {
            get
            {
                return this._Puntos;
            }
            set
            {
                this._Puntos = value;
            }
        }

        public string Descripcion
        {
            get
            {
                return this._Descripcion;
            }
            set
            {
                this._Descripcion = value;
            }
        }

        public string Fallo
        {
            get { return this._fallo; }
        }

        public bool cargar(string ruta)
        {
            XSDValidator validador = new XSDValidator(_rutaxsd, ruta);
            if (!validador.validar())
            {
                this._fallo = validador.Fallo;
                return false;
            }
            else
            {
                XmlDocument xtvl = new XmlDocument();
                xtvl.Load(ruta);
                XmlNodeList nombre = xtvl.GetElementsByTagName("nombre");
                XmlNodeList puntos = xtvl.GetElementsByTagName("puntos");
                XmlNodeList des = xtvl.GetElementsByTagName("desc");
                this.Nombre = nombre[0].InnerText;
                this.Puntos = Convert.ToInt32(puntos[0].InnerText);
                this.Descripcion = des[0].InnerText;
                return true;
            }
        }

        public bool cargar(XmlElement nodo)
        {
            try
            {
                XmlNodeList nombre = nodo.GetElementsByTagName("nombre");
                XmlNodeList puntos = nodo.GetElementsByTagName("puntos");
                XmlNodeList des = nodo.GetElementsByTagName("desc");
                this.Nombre = nombre[0].InnerText;
                this.Puntos = Convert.ToInt32(puntos[0].InnerText);
                this.Descripcion = des[0].InnerText;
                return true;
            }
            catch (Exception ex)
            {
                this._fallo = ex.Message;
                return false;
            }
        }

        public void toXTVL(XmlWriter mixml)
        {
            mixml.WriteStartElement("ventaja");
            mixml.WriteElementString("nombre", this.Nombre);
            mixml.WriteElementString("puntos", this.Puntos.ToString());
            mixml.WriteElementString("desc", this.Descripcion);
            mixml.WriteEndElement();
        }

        public bool guardar(string ruta)
        {
            XmlTextWriter mixml = new XmlTextWriter(ruta, System.Text.Encoding.UTF8);
            mixml.Formatting = System.Xml.Formatting.Indented;
            mixml.WriteStartDocument();
            this.toXTVL(mixml);
            mixml.WriteEndDocument();
            mixml.Close();
            XSDValidator validador = new XSDValidator(_rutaxsd, ruta);
            if (validador.validar())
            {
                return true;
            }
            else
            {
                if (System.IO.File.Exists(ruta))
                {
                    System.IO.File.Delete(ruta);
                }
                this._fallo = validador.Fallo;
                return false;
            }
        }
    }
}
